package exemple15.actions;


import javax.servlet.http.HttpServletRequest;
import org.apache.struts2.interceptor.ServletRequestAware;
import com.opensymphony.xwork2.ActionSupport;
import com.opensymphony.xwork2.Preparable;
import exemple15.beans.Client;
import exemple15.modeles.ModeleClientDAO2;
import exemple15.boiteoutils.GestionDroit;


/**
 * @author Ambroise Malric
 * @copyright 2012
 * @version 0.1
 */

@SuppressWarnings("serial")
public class ClientAction extends ActionSupport implements ServletRequestAware, Preparable
{
	// Attributs
	private GestionDroit gestionDroit=null;
	private HttpServletRequest request;
	
	// Objets
	private Client client;
	
	// id du client
	private int idClient;
	
	
	public Object getModel() {
		return client;
	}

	public int getIdClient() {
		return idClient;
	}

	public void setIdClient(int idClient) {
		this.idClient = idClient;
	}

	public Client getClient() {
		return client;
	}

	public void setClient(Client client) {
		this.client = client;
	}
	
	
	// Preparer les donnees pour les formulaires en modification
	public void prepare() throws Exception {
		// Initialisation du modele
		ModeleClientDAO2 modeleClientDAO=new ModeleClientDAO2();
		
		if(idClient==0) {
			client=new Client();
		} else {
			client=modeleClientDAO.getClient(idClient);
		}
	}
	
	

	public void setServletRequest(HttpServletRequest request)
	{
		 this.request=request;
	}


	
	 
	// Afficher le formulaire d'inscription d'un nouvel utilisateur
	public String ajouter()
	{	
		// Initialisation de la gestion des droits
		gestionDroit=new GestionDroit(this.request);
		
		// On autorise uniquement les utilisateur anonyme
		if(gestionDroit.estAutorise(false,false,true))
		{
			return SUCCESS;
		}
		// Dans le cas contraire ajouter une erreur
		else
		{
			addActionError(getText("erreur.autorisationpage"));
			return ERROR;
		}
	}
	
	
	// Ajouter un utilisateur apres verification des saisies
	public String validerAjouter()
	{
		// Varibales
		int codeErreur=0;
		// Initialisation du modele
		ModeleClientDAO2 modeleClientDAO=new ModeleClientDAO2();
		
		// On ajoute le client e la base de donnee, renvoi 1 si l'ajout s'est deroule avec succes
		codeErreur=modeleClientDAO.ajouterClient(client);
			
		// On test le code de retour pour afficher un message de succes ou d'erreur
		if(codeErreur!=1)
		{		
			// Erreur lors de la creation
			addActionError(getText("erreur.creationclient"));
			return ERROR;
		}
		else
		{	
			// Succes lors de la creation
			addActionMessage(getText("succes.creationclient"));
			// retourner sur la page d'accueil du site
			return "accueil";
		}
	}
	
	
	// Afficher le formulaire de consultation d'un nouvel utilisateur
	public String consulter()
	{	
		return SUCCESS;
	}
	
	
	
	// Afficher le formulaire de modification a partir des informations du modele
	public String modifier()
	{	
		return SUCCESS;
	}
	
	
	
	// Modifier un utilisateur apres verification des saisies
	public String validerModifier()
	{
		// Varibales
		int codeErreur=0;
		// Initialisation du modele
		ModeleClientDAO2 modeleClientDAO=new ModeleClientDAO2();

		// Si l'utilisateur e change son mot de passe on l'enregiste et on le Hash
		if(!client.getMotDePasse().equals(""))
		{
			client.setMotDePasse(client.getMotDePasse());
		}
		// Si l'utilisateur n'a pas change son mot de passe, on recupert son mot de passe hache en session
		else
		{
			String ancienMotDePasse=((Client)request.getSession().getAttribute("compte")).getMotDePasse();
			if(ancienMotDePasse!=null)
			{	
				client.setMotDePasse(ancienMotDePasse);
			}
			else
			{
				// Erreur lors de la lecture dans la session
				addActionError(getText("erreur.session"));
				return ERROR;
			}
		}
		
		// On modifie le client dans la base de donnees, on renvoie 1 si la modification s'est deroulee avec succes
		codeErreur=modeleClientDAO.modifierClient(client);
			
		// On test le code de retour pour afficher un message de succes ou d'erreur
		if(codeErreur!=1)
		{		
			// Erreur lors de la modification
			addActionError(getText("erreur.modificationclient"));
			return ERROR;
		}
		else
		{	
			// On remplace l'objet client dans la session par le nouvel objet
			request.getSession().setAttribute("compte", client);
			// Succes lors de la modification
			addActionMessage(getText("succes.modificationclient"));
			// retourner sur la page d'accueil du site
			return "accueil";
		}
	}
	
	
	
}
